\documentclass[E:/GsjzTle/main/main.tex]{subfiles}
\begin{document}
\begin{lstlisting}
int n , m ;
int pre[maxn] ;
struct Edge
{
   int u , v , w ;
   bool operator <(const Edge &s) const
   {
     return w < s.w ;
   }
} edge[maxm] ; //不需要乘2，因为不需要双向边dfs。
int find(int u) 
{
   if(pre[u] == u)  return u ;
   return pre[u] = find(pre[u]) ;
}
void join(int x,int y)
{
   int fx = find(x) ;
   int fy = find(y) ;
   if(fx != fy)  pre[fx] = fy ;
}
int kruskal()
{
   int ans = 0 , cnt = 0 ;
   sort(edge + 1 , edge + m + 1) ;
   for(int i = 1 ; i <= m ; i ++)
   {
     if(cnt == n - 1)  break ;
     int ru = find(edge[i].u) , rv = find(edge[i].v) ;
     if(ru == rv)  continue ;
     ans += edge[i].w , pre[rv] = ru , cnt ++ ;
   }
   return ans ;
}
int main()
{
   scanf("%d%d" , &n , &m) ;
   for(int i = 1 ; i <= n ; i ++)
     pre[i] = i ;
   for(int i = 1 ; i <= m ; i ++)
     scanf("%d%d%d" , &edge[i].u , &edge[i].v , &edge[i].w) ;
   int ans = kruskal() ;
}
\end{lstlisting}
\end{document}


